home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MacHack 1997
/
MacHack 1997.toast
/
Hacks
/
Hacks ’96
/
VideoFolder 1.0a
/
Source
/
MoreFiles 1.4.1
/
Search.p
< prev
next >
Wrap
Text File
|
1995-12-21
|
7KB
|
159 lines
UNIT Search;
{ Apple Macintosh Developer Technical Support }
{ }
{ IndexedSearch and the PBCatSearch compatibility function. }
{ by Jim Luther, Apple Developer Technical Support Emeritus }
{ }
{ File: Search.p }
{ }
{ Copyright © 1992-1995 Apple Computer, Inc. }
{ All rights reserved. }
{ }
{ You may incorporate this sample code into your applications without }
{ restriction, though the sample code has been provided "AS IS" and the }
{ responsibility for its operation is 100% yours. However, what you are }
{ not permitted to do is to redistribute the source as "DSC Sample Code" }
{ after having made changes. If you're going to re-distribute the source, }
{ we require that you make it clear in the source that the code was }
{ descended from Apple Sample Code, but that you've made changes. }
INTERFACE
USES
Files;
{***************************************************************************}
FUNCTION IndexedSearch (pb: HParmBlkPtr;
dirID: LongInt): OSErr;
{ The IndexedSearch function performs an indexed search in and below the }
{ specified directory using the same parameters (in pb) as is passed to }
{ PBCatSearch. See Inside Macintosh: Files for a description of the }
{ parameter block. }
{ }
{ pb input: A CSParamPtr record specifying the volume to search }
{ and the search criteria. }
{ output: Fields in the parameter block are returned }
{ indicating the number of matches found, the }
{ matches, and if the search ended with noErr, the }
{ CatPosition record that lets you resume a search }
{ where the last search left off. }
{ dirID input: The directory to search. If fsRtDirID is passed, }
{ the entire volume is searched. }
{ }
{ Note: If you use a high-level debugger and use ioSearchTime to limit }
{ the length of time to run the search, you'll want to step over }
{ calls to IndexedSearch because it installs a Time Manager task. }
{ Most high-level debuggers don't deal gracefully with interrupt }
{ driven code. }
{***************************************************************************}
FUNCTION PBCatSearchSyncCompat (paramBlock: HParmBlkPtr): OSErr;
{ The PBCatSearchSyncCompat function uses PBCatSearch (if available) or }
{ IndexedSearch (if PBCatSearch is not available) to search a volume }
{ using a set of search criteria that you specify. It builds a list of }
{ all files or directories that meet your specifications. }
{ }
{ pb input: A CSParamPtr record specifying the volume to search }
{ and the search criteria. }
{ output: Fields in the parameter block are returned }
{ indicating the number of matches found, the }
{ matches, and if the search ended with noErr, the }
{ CatPosition record that lets you resume a search }
{ where the last search left off. }
{ }
{ Note: If you use a high-level debugger and use ioSearchTime to limit }
{ the length of time to run the search, you'll want to step over }
{ calls to PBCatSearchSyncCompat because it calls IndexedSearch }
{ which installs a Time Manager task. Most high-level debuggers }
{ don't deal gracefully with interrupt driven code. }
{***************************************************************************}
FUNCTION NameFileSearch (volName: StringPtr;
vRefNum: Integer;
fileName: Str255;
matches: FSSpecPtr;
reqMatchCount: LongInt;
VAR actMatchCount: LongInt;
newSearch: Boolean;
partial: Boolean): OSErr;
{ Use NameFileSearch to search for files with a specific file name on a }
{ volume that supports PBCatSearch. }
{ Note: A result of catChangedErr means the catalog has changed between }
{ searches, but the search can be continued with the possiblity that you }
{ may miss some matches or get duplicate matches. For all other results }
{ (except for noErr), the search cannot be continued. }
{ }
{ volName input: A pointer to the name of a mounted volume }
{ or nil. }
{ vRefNum input: Volume specification. }
{ fileName input: The name of the file to search for. }
{ matches input: Pointer to array of FSSpec where the match list }
{ is returned. }
{ reqMatchCount input: Maximum number of matches to return (the number }
{ of elements in the matches array). }
{ actMatchCount output: The number of matches actually returned. }
{ newSearch input: If true, start a new search. If false and if }
{ vRefNum is the same as the last call to }
{ NameFileSearch, then start searching at the }
{ position where the last search left off. }
{ partial input: If the partial parameter is false, then only }
{ files that exactly match fileName will be }
{ found. If the partial parameter is true, then }
{ all file names that contain fileName will be }
{ found. }
{***************************************************************************}
FUNCTION CreatorTypeFileSearch (volName: StringPtr;
vRefNum: Integer;
creator: OSType;
fileType: OSType;
matches: FSSpecPtr;
reqMatchCount: LongInt;
VAR actMatchCount: LongInt;
newSearch: Boolean): OSErr;
{ Use CreatorTypeFileSearch to search for files with a specific creator }
{ or fileType on a volume that supports PBCatSearch. }
{ Note: A result of catChangedErr means the catalog has changed between }
{ searches, but the search can be continued with the possiblity that you }
{ may miss some matches or get duplicate matches. For all other results }
{ (except for noErr), the search cannot be continued. }
{ }
{ volName input: A pointer to the name of a mounted volume }
{ or nil. }
{ vRefNum input: Volume specification. }
{ creator input: The creator type of the file to search for. }
{ To ignore the creator type, pass 0x00000000 in }
{ this field. }
{ fileType input: The file type of the file to search for. }
{ To ignore the file type, pass 0x00000000 in }
{ this field. }
{ matches input: Pointer to array of FSSpec where the match list }
{ is returned. }
{ reqMatchCount input: Maximum number of matches to return (the number }
{ of elements in the matches array). }
{ actMatchCount output: The number of matches actually returned. }
{ newSearch input: If true, start a new search. If false and if }
{ vRefNum is the same as the last call to }
{ CreatorTypeFileSearch, then start searching at }
{ the position where the last search left off. }
{***************************************************************************}
IMPLEMENTATION
END.